//+------------------------------------------------------------------+
//|                                                       Custom.mqh |
//|                             Copyright 2000-2025, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#include "Indicator.h"

//+------------------------------------------------------------------+
//| 自定义指标类                                                     |
//| 用途：自定义指标类                                               |
//|         继承自 CIndicator 类                                    |
//+------------------------------------------------------------------+
class CiCustom : public CIndicator
{
protected:
   int               m_num_params;       // 创建参数的数量
   MqlParam          m_params[];         // 创建参数数组

public:
   /** 构造函数 */
   CiCustom(void);
   
   /** 析构函数 */
   ~CiCustom(void);
   
   /**
    * 设置指标缓冲区数量
    * @param buffers 缓冲区数量
    * @return 成功返回 true，失败返回 false
    */
   bool NumBuffers(const int buffers);
   
   /** 获取参数数量 */
   int NumParams(void) const { return(m_num_params); }
   
   /**
    * 获取指定参数的类型
    * @param ind 参数索引
    * @return 参数类型
    */
   ENUM_DATATYPE ParamType(const int ind) const;
   
   /**
    * 获取指定参数的整数值
    * @param ind 参数索引
    * @return 整数值
    */
   long ParamLong(const int ind) const;
   
   /**
    * 获取指定参数的浮点数值
    * @param ind 参数索引
    * @return 浮点数值
    */
   double ParamDouble(const int ind) const;
   
   /**
    * 获取指定参数的字符串值
    * @param ind 参数索引
    * @return 字符串值
    */
   string ParamString(const int ind) const;
   
   /** 获取指标类型 */
   virtual int Type(void) const { return(IND_CUSTOM); }

protected:
   /**
    * 使用通用参数初始化指标
    * @param symbol 交易品种名称
    * @param period 时间周期
    * @param num_params 参数数量
    * @param params 参数数组
    * @return 成功返回 true，失败返回 false
    */
   virtual bool Initialize(const string symbol, const ENUM_TIMEFRAMES period, 
                           const int num_params, const MqlParam &params[]);
};
//+------------------------------------------------------------------+